package com.ddstation.crm.menu.service;

import java.util.List;

import com.ddstation.crm.menu.entity.DtInvsManageInstitutionMenuEntity;
import com.ddstation.crm.menu.entity.DtInvsManageInstitutionMenuPanelEntity;

/**
 * 菜单
 * 1）获取用户显示菜单 （问暖配置 + 机构配置+个人配置）
 * 2）机构层面配置菜单
 * 3）机构配置的基础上 面向个人的菜单限制
 * @author zhangdifeng
 * @date 2018年3月26日
 */
public interface MenuService {

	/**
	 * 根据一级菜单获取二级目录
	 */
	public List<DtInvsManageInstitutionMenuEntity> getSecondMenus(List<DtInvsManageInstitutionMenuEntity> menus,String firstMenuUrl);
	
	/**
	 * panel main 页面
	 * @param institutionId
	 * @param doctorId
	 * @return
	 */
	public List<DtInvsManageInstitutionMenuPanelEntity> getPanelMenu();
	
	/********************************************************************
	 * 使用系统时的     菜单显示
	 * 问暖配置 + 机构配置+个人配置 Start
	 ********************************************************************/
	/**
	 * main page 纵向菜单 用于菜单展示
	 * @param institutionId
	 * @param doctorId
	 * @param filterLevel 0: 问暖配置 1：问暖配置+机构自定义 2： 问暖配置+机构自定义+员工特殊限定
	 * @return
	 */
	public List<DtInvsManageInstitutionMenuEntity> getVerticalMenu(String institutionId, int doctorId, Byte authType, MENU_FILTER_ENUM filterLevel);

	/********************************************************************
	 * 使用系统时的     菜单显示
	 * 问暖配置 + 机构配置+个人配置 Start
	 ********************************************************************/
	/**
	 * main page 工作台 纵向菜单 用于菜单展示
	 * @return
	 */
	public List<DtInvsManageInstitutionMenuEntity> getWorkbenchVerticalMenu();
	
	/**
	 * service page 横向菜单 用于菜单展示
	 * @param institutionId
	 * @param doctorId
	 * @param filterLevel 0: 问暖配置 1：问暖配置+机构自定义 2： 问暖配置+机构自定义+员工特殊限定
	 * @return
	 */
	public List<DtInvsManageInstitutionMenuEntity> getHorizontalMenu(String institutionId, int doctorId, MENU_FILTER_ENUM filterLevel);
	
	
	/********************************************************************
	 * 机构管理员 配置机构所有用户对菜单的可见 配置
	 * 问暖配置 + 机构配置Start
	 ********************************************************************/
//	/**
//	 * 机构设置纵向菜单
//	 * 只获取1级菜单
//	 * @param institutionId
//	 * @param doctorId
//	 * @return
//	 */
//	public List<DtInvsManageInstitutionMenuEntity> initInstitutionVerticalMenuSetting(String institutionId, int doctorId);
	
//	/**
//	 * 机构设置纵向菜单
//	 * @param rules
//	 * @return
//	 */
//	public void saveInstitutionVerticalMenuSetting(String institutionId, List<DtHealthManageInstitutionMenuCustomizeEntity> rules);
	
//	/**
//	 * 机构设置横向菜单
//	 * 只获取1级菜单
//	 * @param institutionId
//	 * @param doctorId
//	 * @return
//	 */
//	public List<DtInvsManageInstitutionMenuEntity> intInstitutionHorizontalMenuSetting(String institutionId, int doctorId);
	
//	/**
//	 * 机构设置横向菜单
//	 * 保存菜单设置
//	 * @param rules
//	 * @return
//	 */
//	public void saveInstitutionHorizontalMenuSetting(String institutionId, List<DtHealthManageInstitutionMenuCustomizeEntity> rules);
	
	
	/********************************************************************
	 * 机构管理员 配置机构中某一用户对菜单的可见 配置
	 * 问暖配置 + 机构配置 + 个人配置 Start
	 ********************************************************************/
	/**
	 * 面向个人权限设置纵向菜单
	 * 只获取1级菜单
	 * @param institutionId
	 * @param doctorId
	 * @return
	 */
	public List<DtInvsManageInstitutionMenuEntity> initDoctorVerticalMenuSetting(String institutionId, int doctorId);
	
	/**
	 * 面向个人权限设置纵向菜单
	 * @param rules
	 * @return
	 */
	public void saveDoctorVerticalMenuSetting(String institutionId, int doctorId, Integer[] minusMenus);
	
	/**
	 * 面向个人权限设置横向菜单
	 * 只获取1级菜单
	 * @param institutionId
	 * @param doctorId
	 * @return
	 */
	public List<DtInvsManageInstitutionMenuEntity> intDoctorHorizontalMenuSetting(String institutionId, int doctorId);
	
	/**
	 * 面向个人权限设置横向菜单
	 * 保存菜单设置
	 * @param rules
	 * @return
	 */
	public void saveDoctorHorizontalMenuSetting(String institutionId, int doctorId, Integer[] minusMenus);
}